Currently there are very few tools available to software developers that provide visibility into the state of a graphics processing unit (GPU) or the state of a program executing on a GPU. Thus, it is difficult for software developers to identify the origin of problems that may be associated with programs that they are developing. For example, many GPUs have several shader processors that execute many instances of graphics shader programs, with initial shaders being used to position a triangle and a subsequent shader used to apply color. To understand a problem associated with a program running on a GPU it may be necessary to understand the state of each shader program instance on a step-by-step basis. Developers generally do not have access to the GPU processor or program state information required for this type of analysis.
Capturing state information associated with the operation of a central processing unit (CPU) is known. For example, in the case of an error in the CPU, it is known to capture all state information of the CPU at the time of the error. The state information may include register values, pointers, program counters, condition codes and the like. Various debugging tools may then be used to analyze the state information.
It would be desirable to be able to capture state information associated with the operation of a GPU. Ideally, this would be accomplished without dedicated circuitry required to capture the state information. In other words, it would be desirable to capture GPU state information using existing circuitry associated with the GPU. If such state information was made available to a developer, standard debugging tools could be used to analyze the state information and thereby provide developers with a new technique to improve their applications.